home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 1 / QRZ Ham Radio Callsign Database - December 1993.iso / ucsd / packet / tcpip / amiga / asrc29k.lha / finger.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-08  |  1.6 KB  |  75 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "global.h"
  4. #include "mbuf.h"
  5. #include "socket.h"
  6. #include "session.h"
  7. #include "proc.h"
  8. #include "netuser.h"
  9. #include "commands.h"
  10. #include "tty.h"
  11. #include "config.h"
  12.  
  13. int
  14. dofinger(argc,argv,p)
  15. int argc;
  16. char *argv[];
  17. void *p;
  18. {
  19.     struct sockaddr_in sock;
  20.     char *cp;
  21.     int s,i;
  22.     struct mbuf *bp;
  23.     struct session *sp;
  24.  
  25.     /* Allocate a session descriptor */
  26.     if((sp = newsession(argv[1],FINGER)) == NULLSESSION){
  27.         tprintf("Too many sessions\n");
  28.         freeargs(argc,argv);
  29.         keywait(NULLCHAR,1);
  30.         return 1;
  31.     }
  32.     sp->ttystate.echo = sp->ttystate.edit = 0;
  33.     sp->flowmode = 1;
  34.     sock.sin_family = AF_INET;
  35.     sock.sin_port = IPPORT_FINGER;
  36.     for(i=1;i<argc;i++){
  37.         cp = strchr(argv[i],'@');
  38.         if(cp == NULLCHAR){
  39.             tprintf("%s: local names not supported\n",argv[i]);
  40.             continue;
  41.         }
  42.         *cp++ = '\0';
  43.         tprintf("%s@%s -- ",argv[i],cp);
  44.         tprintf("Resolving %s... ",cp);
  45.         if((sock.sin_addr.s_addr = resolve(cp)) == 0){
  46.             tprintf(Badhost,cp);
  47.             continue;
  48.         }
  49.         tprintf("trying %s",psocket((struct sockaddr *)&sock));
  50.         if((sp->s = s = socket(AF_INET,SOCK_STREAM,0)) == -1){
  51.             tprintf("Can't create socket\n");
  52.             break;
  53.         }
  54.         if(connect(s,(char *)&sock,sizeof(sock)) == -1){
  55.             cp = sockerr(s);
  56.             tprintf(" -- Connect failed: %s\n",cp != NULLCHAR ? cp : "");
  57.             close_s(s);
  58.             sp->s = -1;
  59.             continue;
  60.         }
  61.         tprintf("\n");
  62.         usprintf(s,"%s\r\n",argv[i]);
  63.         usflush(Curproc->output);
  64.         while(recv_mbuf(s,&bp,0,NULLCHAR,(int *)0) > 0){
  65.             send_mbuf(Curproc->output,bp,0,NULLCHAR,0);
  66.         }
  67.         close_s(s);
  68.         sp->s = -1;
  69.     }
  70.     freeargs(argc,argv);
  71.     keywait(NULLCHAR,1);
  72.     freesession(sp);
  73.     return 0;
  74. }
  75.